function New(fn, ...args) {
  // 创建空对象
  const obj = {}
  // 继承原型链上的方法
  obj._proto_ = fn.prototype
  // 继承构造函数的属性
  let res = fn.apply(obj, args)
  // 根据结果判断返回内容
  return typeof res === 'object' ? res : obj
}

function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.say = function(){
  console.log(this.age, 'age');
}

const p1 = new Person('zsx', 22)
console.log(p1);

const p2 = New(Person, 'lly', 22)
console.log(p2);